package smtpserver

import (
	"context"
	"fmt"
	"os"
	"path/filepath"

	"github.com/nosch/smtpoll/logger"
)

// DefaultMessageHandler 默认的消息处理器
type DefaultMessageHandler struct {
	StorageDir string
}

// NewDefaultMessageHandler 创建新的默认消息处理器
func NewDefaultMessageHandler(storageDir string) *DefaultMessageHandler {
	if err := os.MkdirAll(storageDir, 0755); err != nil {
		logger.LogWarn(context.Background(), "Failed to create storage directory", "error", err)
	}
	return &DefaultMessageHandler{
		StorageDir: storageDir,
	}
}

// HandleMessage 处理接收到的消息
func (h *DefaultMessageHandler) HandleMessage(msg *Message) error {
	// 创建以日期命名的目录
	dateDir := filepath.Join(h.StorageDir, msg.Date.Format("2006-01-02"))
	if err := os.MkdirAll(dateDir, 0755); err != nil {
		return fmt.Errorf("failed to create date directory: %v", err)
	}

	// 生成文件名
	filename := fmt.Sprintf("%s_%s.eml",
		msg.Date.Format("15-04-05"),
		msg.From,
	)
	filepath := filepath.Join(dateDir, filename)

	// 写入文件
	if err := os.WriteFile(filepath, msg.Data, 0644); err != nil {
		return fmt.Errorf("failed to write message file: %v", err)
	}

	logger.LogInfo(context.Background(), "Message saved", "path", filepath)
	return nil
}
